OUT := a.out
SRCS := $(wildcard *.cc)
OBJS := $(patsubst %.cc, %.o, $(SRCS))
OUTS := $(patsubst %.cc, %, $(SRCS))
CC := g++
COM_OP := -g -Wall

# 伪目标
.PHONY: removeObjs pure all clean rebuild rebuildAll

# 该规则放在首位，即输入make默认执行该规则
# 将当前文件夹下所有.cc文件编译链接成一个可执行程序a.out
$(OUT): $(OBJS)
	$(CC) $^ -o $(OUT) -llog4cpp

%.o: %.cc
	$(CC) -c $< -o $@ $(COM_OP)

# 输入make removeObjs执行该规则
# 清除编译产生的.o中间文件
removeObjs:
	$(RM) $(OBJS)

# 输入make pure执行该规则
# 将当前文件夹下所有.cc文件编译链接成一个可执行程序a.out
pure: $(OUT) removeObjs

# 输入make all执行该规则
# 将当前文件夹下所有xxx.cc文件各自编译链接成各自的可执行程序xxx
all: $(OUTS)

%: %.cc
	$(CC) $< -o $@ $(COM_OP)

# 输入make clean执行该规则
# 删除生成的可执行程序及编译产生的.o中间文件
clean:
	$(RM) $(OUTS) $(OUT) $(OBJS)

# 输入make rebuild执行该规则
# 删除生成的可执行程序，并将当前文件夹下所有.cc文件编译链接成一个可执行程序a.out
rebuild: clean $(OUT)

# 输入make rebuildAll执行该规则
# 删除生成的可执行程序，并将当前文件夹下所有xxx.cc文件各自编译链接成各自的可执行程序xxx
rebuildAll: clean all
